package observe_pattern.ex1;

import lombok.Getter;
import lombok.Setter;

/**
 * 角色类，代表游戏中的角色，负责处理角色的生命值和技能
 * @author 申书航
 * @version 1.0
 */
public class Role implements RoleObserve {

    private final String name; // 角色名称

    private final int camp; // 角色阵营

    @Getter
    private int hp; // 角色生命值

    @Setter
    private RoleSkill skill; // 角色技能

    /**
     * 构造函数，初始化角色的名称、阵营和生命值
     *
     * @param name 角色名称
     * @param camp 角色阵营
     * @param hp   角色初始生命值
     */
    public Role(String name, int camp, int hp) {
        this.name = name;
        this.camp = camp;
        this.hp = hp;
    }

    /**
     * 接收技能的更新，修改角色的生命值
     *
     * @param skill 使用的技能
     */
    @Override
    public void updateHp(RoleSkill skill) {
        //已经死亡
        if (hp <= 0) {
            return;
        }
        //修改hp值
        hp += skill.getHp();
        if (skill.getHp() < 0) {
            System.out.println("受到了" + -skill.getHp() + "的伤害");
        }
        else {
            System.out.println("获得了" + skill.getHp() + "的hp");
        }
        System.out.println("当前hp：" + hp);

        if (hp <= 0) {
            System.out.println(name + "死亡了");
        }
    }

    /**
     * 获取角色的阵营
     *
     * @return 角色阵营
     */
    @Override
    public int getCamp() {
        return camp;
    }

    /**
     * 使用角色技能，并通知相关观察者
     */
    public void useSkill() {
        if (hp <= 0) {
            return;
        }
        System.out.println(name + "使用了" + skill + "技能");
        skill.notify(this);
    }
}

